/*
 * File:   main.c
 * Author: amalavassi
 *
 * Created on 11 de mayo de 2010, 05:31 PM
 */

#include <stdio.h>
#include <stdlib.h>
#include <err.h>
#include <unistd.h>

#include <sys/mman.h>
#include <sys/types.h>

#include "Devices.h"
#include "DeviceHandler.h"
#include "MemoryManagement.h"
#include "Utilities.h"
/*
 *
 */

/*
 * Definiciones Globales
 */

/* Cual CPU Virtual de los guest esta ejecutando */
unsigned int __thread cpu_id;

#define DEV_PAGES     256
#define VIRTQUEUE_NUM 256
int main(int argc, char** argv) {
    unsigned long mem;

    //Reserva la cantidad de memoria que esta en los argumentos
//    int indexArgs;
    /*for (indexArgs = 1; indexArgs < argc; indexArgs++) {
		if (argv[indexArgs][0] != '-') {
			mem = atoi(argv[indexArgs]) * 1024 * 1024;
			guest_memory_base = map_zeroed_pages(mem / getpagesize()+ DEV_PAGES);
			guest_current_limit = mem;
			guest_max_memory = mem + DEV_PAGES * getpagesize();
            break;
        }
        else{
                return (EXIT_SUCCESS);
        }
    }*/
    mem = 64* 1024 * 1024;
	guest_memory_base = map_zeroed_pages(mem / getpagesize()+ DEV_PAGES);
    guest_current_limit = mem;
    guest_max_memory = mem + DEV_PAGES * getpagesize();

    //Encontramos la base de la memoria
    printf("Base  \n");
    printf("Datos de la memoria Limite Actual %lu , Maximo de memoria %lu ,Direccion del Guest %lu  \n",guest_current_limit,guest_max_memory,to_physical_adress(guest_memory_base));
    printf(" \n");


    //Encontramos la base de la memoria despues de pedir paginas
    printf("Paginas  \n");
    void* pedirPaginas1 = get_pages(16);
    printf("Datos de la memoria Limite Actual %lu , Maximo de memoria %lu, Direccion Fisica despues de aumento %lu  \n",guest_current_limit,guest_max_memory, to_physical_adress(pedirPaginas1));
    printf(" \n");

    //Encontramos la base de la memoria despues de pedir paginas
    printf("En blanco  \n");
    //void* pedirPaginas2 = get_pages(16);
   // printf("Datos de la memoria Limite Actual %lu , Maximo de memoria %lu, Direccion Fisica despues de aumento %lu  \n",guest_current_limit,guest_max_memory, to_physical_adress(pedirPaginas2));


    //Liberamos la memoria
    munmap(guest_memory_base ,mem / getpagesize()+ DEV_PAGES);
    return (EXIT_SUCCESS);
}

